Lo sviluppo dei kernel CUDA inizia con la definizione di un kernel, ovvero una funzione C++ specializzata progettata per eseguire in parallelo su un numero elevato di core di un NVIDIA GPU. Queste funzioni rappresentano l'unità fondamentale di lavoro nel modello di programmazione CUDA, agendo come ponte tra la logica seriale dell'host e l'esecuzione massivamente parallela sul dispositivo.
1. Il modificatore __global__
Il __global__ specificatore di dichiarazione è un qualificatore API obbligatorio che indica al compilatore di generare il codice per la GPU mantenendo visibile al CPU il punto di ingresso della funzione. Le funzioni che vengono eseguite sulla GPU e possono essere invocate dall'host si chiamano kernel.
2. Ambiente di esecuzione
I kernel vengono inviati ed eseguiti su Streaming Multiprocessors (SM). Lo SM è il principale motore computazionale all'interno di una NVIDIA GPU responsabile del gestire centinaia di thread concorrenti. Ogni SM gestisce blocchi di thread e li programma sui core di elaborazione.
Regola sintattica: I kernel devono restituire rigorosamente void. Poiché operano in modo asincrono rispetto all'host, non possono restituire un valore direttamente al CPU; devono scrivere i risultati indietro nella memoria allocata sul dispositivo.